package com.demo.test.other;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class AppSecretGenerator {
    /**
     * 选择合适的生成方式
     * UUID：适用于需要全局唯一标识符的场景，几乎不需要担心碰撞问题。
     * 时间戳加随机数：适用于对长度有一定要求且碰撞概率可接受的场景。
     * 哈希函数：适用于需要根据某些信息生成唯一标识符的场景，但需要确保输入信息的唯一性。
     * 根据你的具体需求选择合适的生成方式，并确保生成的 app_id 符合你的应用程序的要求。
     *
     * 你也可以结合一些特定的信息（如用户名、设备信息等）使用哈希函数来生成一个相对短的唯一标识符。
     * 这里我们使用 SHA-256 哈希函数作为示例。
     * @param baseInfo
     * @return
     * @throws NoSuchAlgorithmException
     */
    public static String generateAppSecretUsingHash(String baseInfo) throws NoSuchAlgorithmException {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hashBytes = digest.digest(baseInfo.getBytes());
        // Convert byte array to a hexadecimal string
        StringBuilder hexString = new StringBuilder();
        for (byte b : hashBytes) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        // Optionally, take only the first 16 characters (or any desired length)
        return hexString.toString().substring(0, 32);
    }

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String baseInfo = "ca83e47e141c46d9_LD"; // Example base information
        String appId = generateAppSecretUsingHash(baseInfo);
        System.out.println("Generated App ID (Hash): " + appId);
    }
}